iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
佛心分享-IT 人自學之術

演算法與資料結構入門:30天基礎學習之旅系列 第 13

Coding Practice: Get The Max Sum Of Continuous Element-day13

  • 分享至 

  • xImage
  •  

昨天介紹完了 sliding window,但不斷重新計算每個 sliding window 內的總和,並不是聰明的方法

來觀察一下
所謂『前一個 window』與『後一個 window』之間的差異是什麼

從這裡可以知道,window1 跟 window2 只差最前跟最後的數字,中間的部分完全相同
因此我們可以這樣理解

sumOfCurrentWindow - valueOfPrevElement + valueOfNextElement = sumOfNextWindow

Refined the function that get the max/min sum of continuous element

照剛才觀察的邏輯去修改 function

說明一下

  • 先算出第一個 sum of window 才能做接下來的事
  • for loop 中 i start from windowSize 的原因為 第二個 window 比起第一個 window 新增元素的索引值就是 array[windowSize]
  • array[i-windowSize] => privious element / 前一個元素
  • array[i] => next element / 後一個元素
function getMinValue(arr, windowSize) {
    let minSum = Infinity;
    // exclude windowSize is larger than array itself
    if(windowSize> arr.length){
        return false;
    }
    // get sum of first window
    let currentSum = arr.slice(0,windowSize).reduce((a,b)=>a+b);
    for(let i=windowSize;i<arr.length;i++){
        currentSum = currentSum - arr[i-windowSize] + arr[i];
        if(currentSum < minSum ){
            minSum = currentSum;
        }
    }
    return minSum;
}

getMinValue([2, 7, 3, 0, 6, 1, -5, -12, -11], 3); // return -28


上一篇
Concept Of Sliding Window-day12
系列文
演算法與資料結構入門:30天基礎學習之旅13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言